package com.luoshizhen.lease.common.login;

public class LoginUserHolder {
    public static ThreadLocal<LoginUser> threadLocal = new ThreadLocal<>();

    /**
     * 设置当前线程的登录用户信息
     *
     * @param loginUser 登录用户对象，包含用户的相关信息
     */
    public static void setLoginUser(LoginUser loginUser) {
        threadLocal.set(loginUser);
    }

    /**
     * 获取当前线程的登录用户信息
     *
     * 使用ThreadLocal来存储每个线程独立的登录用户信息，可以避免用户信息在多线程环境下的共享，
     * 从而提高安全性此方法主要用于在系统的各个部分之间传递用户信息，
     * 而不需要显式地通过参数传递
     *
     * @return 当前线程存储的LoginUser对象，可能为null如果当前线程尚未关联登录用户信息
     */
    public static LoginUser getLoginUser() {
        return threadLocal.get();
    }

    /**
     * 清除当前线程的ThreadLocal变量
     *
     * 使用ThreadLocal.remove()方法来移除当前线程中与该ThreadLocal实例关联的值
     * 这通常用于防止内存泄漏，特别是在使用ThreadLocal的地方结束时，或者在线程池环境中
     * 以确保没有之前的线程持有者遗留的值
     */
    public static void clear() {
        threadLocal.remove();
    }
}